const adads = (a:number) => {
    return 1
}  //  const adads: (a: number) => number

// 这里箭头函数，指定参数类型，可以直接，参数 :类型名,
// 这个代码是做了三件事：1、先定义一个箭头函数，并且给形参添加了类型注释，2、声明一个变量，且没添加类型注释，3、把这个箭头函数赋值给了变量，那么这个变量就会被推断为箭头函数的类型

const dadda:(a)=>string =(a:number)=>{  //此时函数的参数类型没有定义，也没有默认值，所以也没有类型推断，也没有明确怎么调用，也没有上下文类型，本来是没有类型的，但是左边的变量的类型有定义参数类型，直接就让右边的箭头函数的参数也变成了同样的类型
    return '1'
}  //  const dadda: (a: number) => number

// 也可以在变量的后面加类型，以指定整个箭头函数的具体类型

// 这个代码做了三件事:1、定义了一个箭头函数，但是并没有给形参类型注释，ts自动推断出返回值类型 2、声明了一个变量，给变量添加了类型注释，是一个箭头函数类型3、把这个箭头函数赋值给了定义为箭头函数类型的变量，这时候ts检测到左侧的变量的类型跟右侧的箭头函数的类型不一致，就报错

// 在ts中，当给变量赋值的时候，有两种情况发生：
    // 1、这个变量有类型，
        // 已经有了类型，那么值可定也有类型，这个时候，ts会对变量的类型和值的类型进行校验，看是否类型一致，不一致就报错
    // 2、这个变量还没有类型
        // 变量没类型，而值有类型，那就会根据值的类型推断出变量的类型

// 以上的两种写法等价

// dadda(1)


// 给一个变量的类型注释是什么类型，那它以后就是什么类型，不管它之后会怎么赋值，怎么操作，都不能改变它的类型